Varmista saumaton integraatio ja yhtenäiset käyttökokemukset eri frontend-kehyksissä hallitsemalla web-komponenttien yhteentoimivuustestaus.
Web-komponenttien yhteentoimivuuden testaus: Kehysten välinen yhteensopivuuden todentaminen
Nykypäivän nopeasti kehittyvässä frontend-maailmassa kehittäjät etsivät jatkuvasti ratkaisuja, jotka edistävät uudelleenkäytettävyyttä, ylläpidettävyyttä ja kehitystehokkuutta. Web-komponentit ovat nousseet voimakkaaksi standardiksi, joka tarjoaa kapseloituja, kehyksistä riippumattomia käyttöliittymäelementtejä, joita voidaan käyttää eri projekteissa ja jopa eri JavaScript-kehysten välillä. Web-komponenttien todellinen voima avautuu kuitenkin vasta, kun ne integroituvat saumattomasti mihin tahansa ympäristöön riippumatta taustalla olevasta kehyksestä. Juuri tässä kohtaa perusteellisesta web-komponenttien yhteentoimivuuden testauksesta tulee ensisijaisen tärkeää. Tämä artikkeli syventyy kriittisiin näkökohtiin, joilla varmistetaan, että web-komponenttisi toimivat moitteettomasti lukuisten frontend-kehysten ja -kirjastojen kanssa, edistäen todellista kehysten välistä yhteensopivuutta.
Web-komponenttien lupaus
Web-komponentit ovat joukko verkkopalvelualustan rajapintoja (API), joiden avulla voit luoda uusia, mukautettuja, uudelleenkäytettäviä ja kapseloituja HTML-tageja web-komponenttiesi pohjaksi. Ydinteknologioita ovat:
- Custom Elements (mukautetut elementit): Rajapinnat mukautettujen HTML-elementtien ja niiden toiminnan määrittelyyn ja luomiseen.
- Shadow DOM: Rajapinnat DOM:n ja CSS:n kapselointiin, mikä estää tyyliristiriitoja ja varmistaa komponenttien eristämisen.
- HTML Templates (HTML-mallineet):
<template>- ja<slot>-elementit uudelleenkäytettävien merkintärakenteiden luomiseen.
Web-komponenttien luontainen kehyksistä riippumaton luonne tarkoittaa, että ne on suunniteltu toimimaan itsenäisesti mistä tahansa JavaScript-kehyksestä. Tämä lupaus toteutuu kuitenkin täysin vain, jos komponentit voidaan integroida ja ne toimivat oikein eri suosituissa kehyksissä, kuten React, Angular, Vue.js, Svelte ja jopa tavallisessa HTML/JavaScriptissä. Tämä johtaa meidät ratkaisevan tärkeään yhteentoimivuuden testaukseen.
Miksi yhteentoimivuuden testaus on ratkaisevan tärkeää?
Ilman kattavaa yhteentoimivuustestausta lupaus "kehyksistä riippumattomuudesta" voi muuttua merkittäväksi haasteeksi:
- Epäjohdonmukaiset käyttökokemukset: Komponentti saattaa renderöityä eri tavalla tai käyttäytyä odottamattomasti eri kehyksissä, mikä johtaa hajanaisiin ja hämmentäviin käyttöliittymiin.
- Lisääntynyt kehitystyön kuormitus: Kehittäjät saattavat joutua kirjoittamaan kehyskohtaisia kääreitä tai kiertoteitä komponenteille, jotka eivät integroidu sujuvasti, mikä kumoaa uudelleenkäytettävyyden edut.
- Ylläpidon painajaiset: Eri ympäristöissä epävakaasti käyttäytyvien komponenttien virheenkorjaus ja ylläpito muuttuu merkittäväksi taakaksi.
- Rajoitettu käyttöönotto: Jos web-komponenttikirjaston ei ole todistettu toimivan luotettavasti suurimmissa kehyksissä, sen käyttöönotto jää hyvin rajalliseksi, mikä vähentää sen kokonaisarvoa.
- Saavutettavuus- ja suorituskykyregressiot: Kehyskohtainen renderöinti tai tapahtumankäsittely voi tahattomasti aiheuttaa saavutettavuusongelmia tai suorituskyvyn pullonkauloja, jotka eivät välttämättä ole ilmeisiä yhden kehyksen testiympäristössä.
Globaalille yleisölle, joka rakentaa sovelluksia monipuolisilla teknologiastackeilla, web-komponenttien todellisen yhteentoimivuuden varmistaminen ei ole vain paras käytäntö, vaan välttämättömyys tehokkaalle, skaalautuvalle ja luotettavalle kehitykselle.
Web-komponenttien yhteentoimivuustestauksen avainalueet
Tehokas yhteentoimivuustestaus vaatii järjestelmällistä lähestymistapaa, joka keskittyy useisiin avainalueisiin:
1. Perusrenderöinti ja attribuuttien/ominaisuuksien käsittely
Tämä on testauksen perustaso. Web-komponenttisi tulee renderöityä oikein ja vastata attribuutteihinsa ja ominaisuuksiinsa odotetusti riippumatta siitä, miten se on luotu:
- Attribuuttisidonta: Testaa, miten merkkijonoattribuutit välitetään ja jäsennetään. Kehyksillä on usein erilaisia käytäntöjä attribuuttien sidontaan (esim. kebab-case vs. camelCase).
- Ominaisuussidonta: Varmista, että monimutkaiset datatyypit (oliot, taulukot, boolean-arvot) voidaan välittää ominaisuuksina. Tämä on usein eroavaisuuksien kohta kehysten välillä. Esimerkiksi Reactissa voit välittää propin suoraan, kun taas Vuessa se saatetaan sitoa
v-bind-direktiivillä. - Tapahtumien lähettäminen: Varmista, että mukautetut tapahtumat lähetetään oikein ja että isäntäkehys voi kuunnella niitä. Kehykset tarjoavat usein omat tapahtumankäsittelymekanisminsa (esim. Reactin
onEventName, Vuen@event-name). - Slot-sisällön projisointi: Varmista, että slotteihin (oletusarvoiset ja nimetyt) välitetty sisältö renderöityy tarkasti eri kehyksissä.
Esimerkki: Kuvitellaan mukautettu painikekomponentti, <my-button>, jolla on attribuutteja kuten color ja ominaisuuksia kuten disabled. Testaus sisältää:
<my-button color="blue"></my-button>-elementin käyttäminen tavallisessa HTML:ssä.<my-button color={'blue'}></my-button>-elementin käyttäminen Reactissa.<my-button :color='"blue"'></my-button>-elementin käyttäminen Vuessa.- Varmistaminen, että
disabled-ominaisuus voidaan asettaa ja poistaa oikein kussakin kontekstissa.
2. Shadow DOM -kapselointi ja tyylittely
Shadow DOM on avain web-komponenttien kapselointiin. Kuitenkin isäntäkehyksen tyylien ja komponentin Shadow DOM -tyylien väliset vuorovaikutukset vaativat huolellista validointia:
- Tyylien eristäminen: Varmista, että web-komponentin Shadow DOM:n sisällä määritellyt tyylit eivät vuoda ulos ja vaikuta isäntäsivuun tai muihin komponentteihin.
- Tyylien periytyminen: Testaa, miten CSS-muuttujat (custom properties) ja light DOM:sta perityt tyylit tunkeutuvat Shadow DOM:iin. Useimmat modernit kehykset kunnioittavat CSS-muuttujia, mutta vanhemmat versiot tai tietyt konfiguraatiot voivat aiheuttaa haasteita.
- Globaalit tyylitiedostot: Varmista, että globaalit tyylitiedostot eivät vahingossa korvaa komponentin tyylejä, ellei sitä ole nimenomaisesti tarkoitettu CSS-muuttujien tai tiettyjen valitsimien kautta.
- Kehyskohtaiset tyyliratkaisut: Joillakin kehyksillä on omat tyyliratkaisunsa (esim. CSS Modules, styled-components Reactissa, Vuen scopattu CSS). Testaa, miten web-komponenttisi käyttäytyy, kun se sijoitetaan näihin tyyliteltyihin ympäristöihin.
Esimerkki: Modaalikomponentti, jolla on sisäinen tyylittely otsikolle, rungolle ja alatunnisteelle. Testaa, että nämä sisäiset tyylit pysyvät eristettyinä ja että sivun globaalit tyylit eivät riko modaalin asettelua. Testaa myös, että isäntäelementtiin määriteltyjä CSS-muuttujia voidaan käyttää modaalin Shadow DOM:ssa sen ulkoasun mukauttamiseen, esimerkiksi --modal-background-color.
3. Datasidonta ja tilanhallinta
Se, miten data virtaa web-komponenttiisi ja sieltä ulos, on kriittistä monimutkaisissa sovelluksissa:
- Kaksisuuntainen datasidonta: Jos komponenttisi tukee kaksisuuntaista sidontaa (esim. syöttökenttä), varmista sen toimivan saumattomasti kehysten kanssa, joilla on omat kaksisuuntaiset sidontamekanisminsa (kuten Angularin
ngModeltai Vuenv-model). Tämä edellyttää usein input-tapahtumien kuuntelua ja ominaisuuksien päivittämistä. - Kehyksen tilan integrointi: Testaa, miten komponenttisi sisäinen tila (jos sellainen on) vuorovaikuttaa isäntäkehyksen tilanhallintaratkaisujen kanssa (esim. Redux, Vuex, Zustand, Angular-palvelut).
- Monimutkaiset tietorakenteet: Varmista, että ominaisuuksina välitetyt monimutkaiset dataobjektit ja taulukot käsitellään oikein, erityisesti kun mutaatioita tapahtuu komponentin tai kehyksen sisällä.
Esimerkki: Lomakkeen syöttökomponentti, joka käyttää v-model-direktiiviä Vuessa. Web-komponentin tulisi lähettää `input`-tapahtuma uudella arvolla, jonka Vuen v-model sitten kaappaa ja päivittää sidotun dataominaisuuden.
4. Tapahtumankäsittely ja kommunikaatio
Komponenttien on kommunikoitava ympäristönsä kanssa. Tapahtumankäsittelyn testaaminen eri kehyksissä on elintärkeää:
- Mukautettujen tapahtumien nimet: Varmista johdonmukaisuus mukautettujen tapahtumien nimissä ja datakuormissa.
- Natiivit selaintapahtumat: Varmista, että natiivit selaintapahtumat (kuten `click`, `focus`, `blur`) etenevät oikein ja että isäntäkehys voi kaapata ne.
- Kehysten tapahtumakääreet: Jotkin kehykset saattavat kääriä natiiveja tai mukautettuja tapahtumia. Testaa, etteivät nämä kääreet muuta tapahtumadataa tai estä kuuntelijoiden liittämistä.
Esimerkki: Raahattava komponentti, joka lähettää 'drag-end'-mukautetun tapahtuman koordinaateilla. Testaa, että tämän tapahtuman voi napata React-komponentti käyttämällä onDragEnd={handleDragEnd} ja Vue-komponentti käyttämällä @drag-end="handleDragEnd".
5. Elinkaaren takaisinkutsut
Web-komponenteilla on määritellyt elinkaaren takaisinkutsut (esim. `connectedCallback`, `disconnectedCallback`, `attributeChangedCallback`). Niiden vuorovaikutus kehysten elinkaarien kanssa vaatii huolellista harkintaa:
- Alustusjärjestys: Ymmärrä, miten komponenttisi elinkaaren takaisinkutsut laukeavat suhteessa isäntäkehyksen komponentin elinkaaren koukkuihin.
- DOM:iin liittäminen/irrottaminen: Varmista, että `connectedCallback` ja `disconnectedCallback` laukeavat luotettavasti, kun komponentti lisätään tai poistetaan DOM:sta kehyksen renderöintimoottorin toimesta.
- Attribuuttimuutokset: Varmista, että `attributeChangedCallback` havaitsee oikein attribuuttimuutokset, erityisesti kun kehykset saattavat päivittää attribuutteja dynaamisesti.
Esimerkki: Komponentti, joka hakee dataa `connectedCallback`-kutsussaan. Testaa, että tämä hakupyyntö tehdään vain kerran, kun komponentti on liitetty Angularin, Reactin tai Vuen toimesta, ja että se siivotaan asianmukaisesti (esim. hakujen keskeyttäminen), kun `disconnectedCallback` kutsutaan.
6. Saavutettavuus (A11y)
Saavutettavuuden tulisi olla ensisijainen asia. Yhteentoimivuustestauksen on varmistettava, että saavutettavuusstandardit säilyvät eri kehyksissä:
- ARIA-attribuutit: Varmista, että asianmukaiset ARIA-roolit, -tilat ja -ominaisuudet on sovellettu oikein ja että ne ovat avustavien teknologioiden käytettävissä.
- Näppäimistönavigointi: Testaa, että komponentti on täysin navigoitavissa ja käytettävissä näppäimistöllä kunkin kehyksen kontekstissa.
- Fokuksen hallinta: Varmista, että fokuksen hallinta Shadow DOM:n sisällä ja sen vuorovaikutus isäntäkehyksen fokuksenhallintastrategioiden kanssa ovat vankkoja.
- Semanttinen HTML: Varmista, että taustalla oleva rakenne käyttää semanttisesti asianmukaisia HTML-elementtejä.
Esimerkki: Mukautetun dialogi-web-komponentin on hallittava fokusta oikein, lukittava se dialogin sisälle sen ollessa auki ja palautettava se dialogin avanneeseen elementtiin, kun se suljetaan. Tämän käyttäytymisen on oltava johdonmukaista riippumatta siitä, käytetäänkö dialogia Angular-sovelluksessa vai tavallisella HTML-sivulla.
7. Suorituskykyyn liittyvät näkökohdat
Se, miten kehykset vuorovaikuttavat web-komponenttien kanssa, voi vaikuttaa suorituskykyyn:
- Ensimmäinen renderöintiaika: Mittaa, kuinka nopeasti komponentti renderöityy, kun se integroidaan eri kehyksiin.
- Päivityssuorituskyky: Seuraa suorituskykyä tilanmuutosten ja uudelleenrenderöintien aikana. Tehottomat datasidonnat tai liiallinen DOM-manipulaatio kehyksen ja komponentin vuorovaikutuksessa voi aiheuttaa hidastumisia.
- Paketin koko: Vaikka web-komponentit itsessään ovat usein kevyitä, kehyskääreet tai build-konfiguraatiot voivat lisätä ylimääräistä kuormaa.
Esimerkki: Monimutkainen dataruudukko-web-komponentti. Testaa sen vierityssuorituskykyä ja päivitysnopeutta, kun se on täytetty tuhansilla riveillä React-sovelluksessa verrattuna vanilla JavaScript -sovellukseen. Etsi eroja suorittimen käytössä ja kuvataajuuden pudotuksissa.
8. Kehyskohtaiset vivahteet ja erikoistapaukset
Jokaisella kehyksellä on omat omituisuutensa ja tulkintansa verkkostandardeista. Perusteellinen testaus sisältää näiden paljastamisen:
- Palvelinpuolen renderöinti (SSR): Miten web-komponenttisi käyttäytyy SSR:n aikana? Jotkin kehykset saattavat kamppailla web-komponenttien oikeanlaisen hydratoinnin kanssa alkuperäisen palvelinrenderöinnin jälkeen.
- Tyyppijärjestelmät (TypeScript): Jos käytät TypeScriptiä, varmista, että web-komponenttiesi tyyppimääritykset ovat yhteensopivia sen kanssa, miten kehykset kuluttavat niitä.
- Työkalut ja build-prosessit: Erilaiset build-työkalut (Webpack, Vite, Rollup) ja kehysten komentoriviliittymät (CLI) voivat vaikuttaa siihen, miten web-komponentit paketoidaan ja käsitellään.
Esimerkki: Web-komponentin testaaminen SSR:llä Angular Universalissa. Varmista, että komponentti renderöityy oikein palvelimella ja hydratoituu sitten oikein asiakkaalla ilman virheitä tai odottamattomia uudelleenrenderöintejä.
Strategiat tehokkaaseen yhteentoimivuustestaukseen
Vankan testausstrategian omaksuminen on avain luotettavan kehysten välisen yhteensopivuuden saavuttamiseen:
1. Kattava testauskokonaisuuden suunnittelu
Testauskokonaisuutesi tulisi kattaa kaikki yllä mainitut kriittiset alueet. Harkitse:
- Yksikkötestit: Yksittäisen komponentin logiikalle ja sisäiselle tilalle.
- Integraatiotestit: Web-komponentin ja isäntäkehyksen välisten vuorovaikutusten varmistamiseen. Tässä yhteentoimivuustestaus todella loistaa.
- End-to-End (E2E) -testit: Käyttäjäpolkujen simulointiin eri kehyssovelluksissa.
2. Testauskehysten hyödyntäminen
Hyödynnä vakiintuneita testaustyökaluja ja -kirjastoja:
- Jest/Vitest: Tehokkaat JavaScript-testauskehykset yksikkö- ja integraatiotesteille.
- Playwright/Cypress: End-to-end-testaukseen, jonka avulla voit simuloida käyttäjävuorovaikutuksia todellisissa selainympäristöissä eri kehyksissä.
- WebdriverIO: Toinen vankka E2E-testauskehys, joka tukee useita selaimia.
3. Kehyskohtaisten testisovellusten luominen
Tehokkain tapa testata yhteentoimivuutta on luoda pieniä, omistettuja sovelluksia tai testivaljaita käyttäen kutakin kohdekehystä. Esimerkiksi:
- React-testisovellus: Minimaalinen React-sovellus, joka tuo ja käyttää web-komponenttejasi.
- Angular-testisovellus: Yksinkertainen Angular-projekti, joka demonstroi komponenttejasi.
- Vue-testisovellus: Perus-Vue.js-sovellus.
- Svelte-testisovellus: Svelte-projekti.
- Tavallinen HTML/JS-sovellus: Perustaso standardille verkkokäyttäytymiselle.
Näiden sovellusten sisällä kirjoita integraatiotestejä, jotka kohdistuvat erityisesti yleisiin käyttötapauksiin ja mahdollisiin sudenkuoppiin.
4. Automatisoitu testaus ja CI/CD-integraatio
Automatisoi testisi mahdollisimman pitkälle ja integroi ne jatkuvan integraation/jatkuvan toimituksen (CI/CD) putkeen. Tämä varmistaa, että jokainen koodimuutos validoidaan automaattisesti kaikkia kohdekehyksiä vastaan, mikä havaitsee regressiot varhaisessa vaiheessa.
Esimerkki CI/CD-työnkulusta:
- Työnnä koodi versionhallintaan.
- CI-palvelin käynnistää build-prosessin.
- Build-prosessi kääntää web-komponentit ja asettaa testiympäristöt Reactille, Angularille ja Vuelle.
- Automatisoidut testit ajetaan kutakin ympäristöä vastaan (yksikkö-, integraatio-, E2E-testit).
- Ilmoitukset lähetetään testien onnistumisesta tai epäonnistumisesta.
- Jos testit läpäistään, julkaisuputki käynnistetään.
5. Suorituskyvyn profilointi ja seuranta
Integroi suorituskykytestaus automatisoituun kokonaisuuteesi. Käytä selaimen kehittäjätyökaluja tai erikoistuneita profilointityökaluja mitataksesi avainmittareita, kuten latausaikaa, muistinkäyttöä ja vuorovaikutuksen reagoivuutta kussakin kehyskontekstissa.
6. Dokumentaatio kehysintegraatiota varten
Tarjoa selkeä ja ytimekäs dokumentaatio siitä, miten web-komponentit integroidaan suosittuihin kehyksiin. Tämä sisältää:
- Asennusohjeet.
- Esimerkkejä attribuuttien ja ominaisuuksien sidonnasta.
- Kuinka käsitellä mukautettuja tapahtumia.
- Vinkkejä kehyskohtaisten vivahteiden käsittelyyn (esim. SSR).
Tämän dokumentaation tulisi heijastaa yhteentoimivuustestauksesi tuloksia.
7. Yhteisön palaute ja virheraportointi
Kannusta käyttäjiä ilmoittamaan kaikista kohtaamistaan yhteentoimivuusongelmista. Monipuolinen globaali käyttäjäkunta löytää väistämättä erikoistapauksia, jotka olet saattanut jättää huomiotta. Luo selkeät kanavat virheraportointiin ja käsittele aktiivisesti ilmoitettuja ongelmia.
Työkalut ja kirjastot yhteentoimivuuteen
Vaikka voit rakentaa testausinfrastruktuurisi alusta alkaen, useat työkalut voivat merkittävästi virtaviivaistaa prosessia:
- LitElement/Lit: Suosittu kirjasto web-komponenttien rakentamiseen, joka itsessään käy läpi laajaa kehysten välistä testausta. Sen sisäänrakennettuja testausapuohjelmia voidaan mukauttaa.
- Stencil: Kääntäjä, joka generoi standardeja web-komponentteja, mutta tarjoaa myös työkaluja kehyssidoksiin, mikä yksinkertaistaa integraatiota ja testausta.
- Testing Library (React Testing Library, Vue Testing Library, jne.): Vaikka pääasiassa kehyskohtaisille komponenteille, käyttäjävuorovaikutusten ja saavutettavuuden testauksen periaatteet pätevät. Voit mukauttaa näitä testaamaan, miten kehykset vuorovaikuttavat mukautettujen elementtiesi kanssa.
- Kehyskohtaiset kääreet: Harkitse kevyiden kääreiden luomista web-komponenteillesi kutakin kehystä varten. Nämä kääreet voivat käsitellä kehyskohtaisia datasidontakäytäntöjä ja tapahtumakuuntelijoita, mikä tekee integraatiosta sujuvampaa ja yksinkertaistaa testausta. Esimerkiksi React-kääre saattaa kääntää React-proppeja web-komponenttien ominaisuuksiksi ja tapahtumiksi.
Globaalit näkökohdat web-komponenttien yhteentoimivuudessa
Kun kehitetään ja testataan web-komponentteja globaalille yleisölle, useita tekijöitä puhtaan teknisen yhteensopivuuden lisäksi tulee ottaa huomioon:
- Lokalisaatio ja kansainvälistäminen (i18n/l10n): Varmista, että komponenttisi voivat helposti mukautua eri kieliin, päivämäärämuotoihin ja numeromuotoihin. Tämän testaaminen tarkoittaa sen varmistamista, miten kehyspohjaiset lokalisaatiokirjastot vuorovaikuttavat komponenttisi tekstisisällön ja muotoilun kanssa.
- Aikavyöhykkeet ja valuutat: Jos komponenttisi näyttävät aikaa tai rahallisia arvoja, varmista, että ne käsittelevät eri aikavyöhykkeitä ja valuuttoja oikein, erityisesti kun ne integroidaan sovelluksiin, jotka hallinnoivat käyttäjäkohtaisia asetuksia.
- Suorituskyky eri alueilla: Verkon viive voi vaihdella merkittävästi ympäri maailmaa. Testaa web-komponenttisi suorituskykyä simuloiduilla hitaammilla verkoilla varmistaaksesi hyvän käyttökokemuksen käyttäjille alueilla, joilla on vähemmän kehittynyt internet-infrastruktuuri.
- Selainyhteensopivuus: Vaikka web-komponentit ovat laajalti tuettuja, vanhemmissa selaimissa tai tietyissä selainversioissa voi olla epäjohdonmukaisuuksia. Testaa laajalla selainvalikoimalla, ottaen huomioon yleisimmät selaimet eri globaaleilla markkinoilla.
Web-komponenttien yhteentoimivuuden tulevaisuus
Web-komponenttien kypsyessä ja kehysten omaksuessa niitä yhä enemmän, rajat natiivien web-komponenttien ja kehyskohtaisten komponenttien välillä hämärtyvät jatkuvasti. Kehykset parantavat kykyään kuluttaa web-komponentteja suoraan, ja työkalut kehittyvät tekemään tästä integraatiosta saumattomampaa. Yhteentoimivuustestauksen painopiste siirtyy todennäköisesti suorituskyvyn hiomiseen, saavutettavuuden parantamiseen monimutkaisissa skenaarioissa ja sujuvan integraation varmistamiseen edistyneiden kehysominaisuuksien, kuten SSR:n ja palvelinkomponenttien, kanssa.
Johtopäätös
Web-komponenttien yhteentoimivuuden testaus ei ole valinnainen lisäosa; se on perusvaatimus uudelleenkäytettävien, vankkojen ja yleisesti yhteensopivien käyttöliittymäelementtien rakentamisessa. Testaamalla järjestelmällisesti attribuuttien/ominaisuuksien käsittelyä, Shadow DOM -kapselointia, datavirtaa, tapahtumaviestintää, elinkaaren johdonmukaisuutta, saavutettavuutta ja suorituskykyä monipuolisessa joukossa frontend-kehyksiä ja -ympäristöjä, voit avata web-komponenttien todellisen potentiaalin. Tämä kurinalainen lähestymistapa varmistaa, että komponenttisi tarjoavat johdonmukaisen ja luotettavan käyttökokemuksen riippumatta siitä, missä tai miten niitä käytetään, antaen kehittäjille maailmanlaajuisesti mahdollisuuden rakentaa parempia, yhteenliitetympiä sovelluksia.